// 目标：实现递归三定律中的基准情形和尾递归优化
// TODO: 补全 factorial 函数
fn factorial(n: u32, accumulator: u32) -> u32 {
    if n == 0 {
        // 基准情形
	accumulator	
	// 基准情形：返回累计结果
    } else {
        // 递归调用（需满足尾递归优化）
	factorial(n - 1, accumulator * n)
	// 尾递归调用：先计算后传递
    }
}

#[test]
fn test_factorial() {
    assert_eq!(factorial(5, 1), 120);
    assert_eq!(factorial(0, 1), 1);  // 添加边界测试
}

// 可选：添加用户友好接口
#[allow(dead_code)]
fn factorial_entry(n: u32) -> u32 {
    factorial(n, 1)
}

fn main() {
    println!("5! via tail-recursive: {}", factorial(5, 1));
    println!("10! via entry function: {}", factorial_entry(10));
    println!("Edge case 0! = {}", factorial(0, 1));
}
